#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
//函数外全局变量定义
int position_x,position_y;//飞机位置
int bullet_x,bullet_y;//子弹位置
int enemy_x,enemy_y;//敌机位置 
int high,width;//游戏画面  
int score; 
void hide()         //隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
}

void gotoshow(int x, int y)     //将光标移动到(x,y)
{
	HANDLE handle = GetStdHandle (STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition (handle, pos);
}
void startup()//数据初始化 
{
	high=18;
	width=30; 
	position_x=high/2;
	position_y=width/2;
	bullet_x=-1;
	bullet_y=width/2;
	enemy_x=0;
	enemy_y=width/2; 
	score=0;
}
void show()//显示画面 
{
	int i,j;
	gotoshow(0, 0);
	hide(); 
	for(i=0;i<=high;i++)
	{
		for(j=0;j<width;j++)
		{
			if(i==position_x&&j==position_y)
			printf("*");//输出机头 
			else if(i==(position_x+1)&&j==(position_y-2))
			printf("*****");//输出机尾
			else if(i==(position_x+2)&&j==(position_y-1))
			printf("* *");//输出机尾
			else if(i==bullet_x&&j==bullet_y)
			printf("|");//输出子弹 
			else if(i==enemy_x&&j==enemy_y)
			printf("@");//输出敌机 
			else
			printf(" ");//输出空格 
		}
		printf("\n");
	}
	printf("得分:%d",score);
}
void updatewithoutinput()//与用户输入无关的更新 
{
	if(bullet_x==enemy_x&&bullet_y==enemy_y)
	{
		score++;
		enemy_x=0;
		enemy_y=rand()%(width-1);
		bullet_x=-1;
	}
	static int speed=0;//控制敌机下落速度 
	if (speed<100/(score+5))
	    speed++; 
	if(bullet_x>-1)
		bullet_x--;
	if(enemy_x>high)
	{
		enemy_x=0;
		enemy_y=rand()%width;
	} 
	else
	{
	    if(speed==100/(score+5))
		{
		 enemy_x++;
		 speed=0;
		}
	}
	
}
void updatewithinput()//与用户输入有关的更新
{
	char input;
	if(kbhit())//当按键时执行 
	{
	   input = getch();
	   if(input=='w')
		if(position_x>0)
			position_x--;
		else
			position_x=0;
	    if(input=='s')
		if(position_x<high-3)
			position_x++;
		else
			position_x=high-3;
	    if(input=='a')
		if(position_y>2)
			position_y--;
		else
			position_y=2;
		if(input=='d')
		if(position_y<width-2)
			position_y++;
		else
			position_y=width-2;
	   if (input==' ')
	   {
	     bullet_x=position_x-1; 
	     bullet_y=position_y;
	   }
	   if(input==27)
	   {
		   system("pause");
		   system("cls");
	   }
   }
	   
}
int main()
{
	startup();//数据初始化 
	while(1)//游戏循环执行 
	{
		show();//显示画面 
		updatewithoutinput();//与用户输入无关的更新 
		updatewithinput();//与用户输入有关的更新
	}
	return 0;
} 